This disclosure relates to a data stream processing in general and more specifically to a data stream processing language for processing data streams received from instrumented software.
Software developers monitor different aspects of software they develop by instrumenting the software. These include performance of the software, errors encountered during execution of the software, significant events encountered during execution of the software, information describing which parts of code are being executed and which parts are not being executed, and so on. Conventional techniques for instrumenting code include statements in the code that log different types of information to log files or print information on screens. This technique is suitable for simple applications, for example, applications having a simple flow of execution that execute on a single processor. However, these techniques for instrumenting software are inadequate for complex applications that may be distributed across multiple systems, each system executing multiple processes or threads of execution.
Another conventional technique for instrumenting such complex systems is to use help of experts in instrumenting code. Certain vendors provide expert services that help with instrumentation of code. However, these vendors typically provide standard services that are often not very flexible. Furthermore, these vendor based solutions have significant overhead in terms of time needed by the vendor to instrument code. Accordingly, these solutions are suited towards a slow development cycle, for example, a year-long development cycle. However, software development and release cycles for software products have become short. For example, there are several online systems in which software developers make changes on a monthly, weekly, or even daily basis and deploy them. Due to the significant overhead of vendor based instrumentation solutions, developers find it difficult to use these services in a fast paced development environment.
Furthermore, conventional techniques for instrumenting code cause significant delays in assimilating the information, storing the information, and analyzing the information to generate reports. As a result, there can be significant delay between the time that a problem occurs in the software and the time that the problem is detected via instrumentation of the code. Accordingly, conventional systems for generating reports based on instrumentation of software are often inadequate in fast paced development cycles of complex applications.